package com.hsl.hslcodemother.service;

import com.hsl.hslcodemother.model.dto.chathistory.ChatHistoryQueryRequest;
import com.hsl.hslcodemother.model.entity.ChatHistory;
import com.hsl.hslcodemother.model.vo.ChatHistoryVO;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.service.IService;

import java.util.List;

/**
 * 对话历史 服务层
 *
 * @author <a href="https://gitee.com/liul3">猴赛雷</a>
 */
public interface ChatHistoryService extends IService<ChatHistory> {

    /**
     * 获取查询条件
     *
     * @param chatHistoryQueryRequest 对话历史查询条件
     * @return 查询条件
     */
    QueryWrapper getQueryWrapper(ChatHistoryQueryRequest chatHistoryQueryRequest);

    /**
     * 获取对话历史封装
     *
     * @param chatHistory 对话历史
     * @return 对话历史封装
     */
    ChatHistoryVO getChatHistoryVO(ChatHistory chatHistory);

    /**
     * 获取对话历史封装列表
     *
     * @param chatHistoryList 对话历史列表
     * @return 对话历史封装列表
     */
    List<ChatHistoryVO> getChatHistoryVOList(List<ChatHistory> chatHistoryList);

    /**
     * 根据应用ID分页查询对话历史（最新10条）
     *
     * @param appId 应用ID
     * @param pageNum 页码
     * @param pageSize 页大小
     * @return 对话历史列表
     */
    List<ChatHistoryVO> getLatestByAppId(Long appId, Integer pageNum, Integer pageSize);

    /**
     * 根据应用ID查询对话历史总数
     *
     * @param appId 应用ID
     * @return 总数
     */
    Long countByAppId(Long appId);

    /**
     * 保存用户消息
     *
     * @param appId 应用ID
     * @param userId 用户ID
     * @param content 消息内容
     * @return 是否保存成功
     */
    boolean saveUserMessage(Long appId, Long userId, String content);

    /**
     * 保存AI消息
     *
     * @param appId 应用ID
     * @param userId 用户ID
     * @param content 消息内容
     * @return 是否保存成功
     */
    boolean saveAiMessage(Long appId, Long userId, String content);

    /**
     * 保存错误消息
     *
     * @param appId 应用ID
     * @param userId 用户ID
     * @param errorMessage 错误信息
     * @return 是否保存成功
     */
    boolean saveErrorMessage(Long appId, Long userId, String errorMessage);

    /**
     * 根据应用ID删除所有对话历史
     *
     * @param appId 应用ID
     * @return 是否删除成功
     */
    boolean deleteByAppId(Long appId);

    /**
     * 批量为 ChatHistoryVO 注入应用和用户信息
     *
     * @param chatHistoryVOList 对话历史VO列表
     * @return 注入信息后的对话历史VO列表
     */
    List<ChatHistoryVO> fillAppAndUser(List<ChatHistoryVO> chatHistoryVOList);
}